<?php

/**
 * User
 * 
 * Модель для модуля User
 * 
 * @package Basic 
 * @author Игорь Будасов aka Lord <igor.budasov@gmail.com>
 */
 
class User extends Zend_Db_Table_Abstract
{
	
/*------------------------------------------------------------------------------*/
	
	// имя таблицы, с которой будет работать Zend_Db_Table
	protected $_name = 'users';
		
/*------------------------------------------------------------------------------*/

	/**
	* Метод возвращает ресурсы
	*/
	
	public function getResources()
	{
		$query = $this->select('module', 'controller')
					->setIntegrityCheck(false)
					->from('acl_resources')
					->order('module')
					->order('controller')
					->order('action')
					;
		return  $this->fetchAll($query)->toArray();
	}

/*------------------------------------------------------------------------------*/

	/**
	* Метод возвращает айдишники ресурсов, которыми располагает роль
	* На основе таблицы-перекрестка
	* 
	* @param int $id
	* @return array
	*/
	
	public function getSomeResources($id)
	{
		$query = $this->select()
					->setIntegrityCheck(false)
					->from('acl_cross')
					->where('role_id = ' . $id);
					
		return  $this->fetchAll($query);
	}

/*------------------------------------------------------------------------------*/

	/**
	* Метод возвращает ресурсы, которыми располагает роль
	* На основе таблицы-перекрестка
	* 
	* @param int $id
	* @return array
	*/
	
	public function getRoleResources($id)
	{
		$query = $this->select()
					// отключаем проверку
					->setIntegrityCheck(false)
					// из кросс-таблицы не достаем ничего
					->from('acl_cross', array())
					// присоединяем таблицу ресурсив
					->joinInner('acl_resources', 
								// указываем связку
								"acl_cross.res_id = acl_resources.id",
								// из нее достаем указаные поля
								array('module', 'controller', 'action')
								)
					// условие извлечения из кросс-таблицы
					->where('acl_cross.role_id = ' . $id);
					
		return  $this->fetchAll($query);
	}

/*------------------------------------------------------------------------------*/

	/**
	* Метод возвращает роли
	*/
	
	public function getRoles()
	{
		$query = $this->select()
					->setIntegrityCheck(false)
					->from('acl_roles');
		return  $this->fetchAll($query);
	}

/*------------------------------------------------------------------------------*/

	/**
	* Метод возвращает роли
	*/
	
	public function getPublicRoles()
	{
		$query = $this->select()
					->setIntegrityCheck(false)
					->from('acl_roles')
					->where('id != 111');
		return  $this->fetchAll($query);
	}

/*------------------------------------------------------------------------------*/

    /**
    * Метод возвращает одну роль
    */
    
    public function getRole($id)
    {                 
        $query = $this->select()
                    ->setIntegrityCheck(false)
                    ->from('acl_roles')
                    ->where('id=' . $id)
                    ;
        return  $this->fetchRow($query);
    }

/*------------------------------------------------------------------------------*/

	/**
	* Метод возвращает одну роль по имени
	*/
	
	public function getRoleByName($name)
	{
		$query = $this->select()
					->setIntegrityCheck(false)
					->from('acl_roles')
					->where('name="' . $name .'"')
					;
		return  $this->fetchRow($query);
	}

/*------------------------------------------------------------------------------*/

	/**
	* Метод для получения одного ресурса
	*/
	
	public function getResource($id)
	{
		$query = $this->select()
					->setIntegrityCheck(false)
					->from('acl_resources')
					->where('id=' . $id)
					;
		return  $this->fetchRow($query);
	}

/*------------------------------------------------------------------------------*/

	/**
	* Метод для добавления роли
	*/
	
	public function addRole($data)
	{      
		$this->_setTable('acl_roles');
		
		return  $this->insert($data);
	}

/*------------------------------------------------------------------------------*/

	/**
	* Метод для редактироования роли
	*/
	
	public function updateRole($data, $id)
	{      
		$this->_setTable('acl_roles');
			   
		return  $this->update($data, 'id=' . $id );
	}

/*------------------------------------------------------------------------------*/

	/**
	* Метод для редактироования ресурса
	*/
	
	public function updateResource($data, $id)
	{      
		$this->_setTable('acl_resources');
			   
		return  $this->update($data, 'id=' . $id );
	}

/*------------------------------------------------------------------------------*/

	/**
	* Метод для добавления перекрестка роль/ресурс
	*/
	
	public function addCross($data)
	{      
		$this->_setTable('acl_cross');
		
		return  $this->insert($data);
	}

/*------------------------------------------------------------------------------*/

	/**
	* Метод для добавления ресурса
	*/
	
	public function addResource($data)
	{      
		$this->_setTable('acl_resources');
		
		return  $this->insert($data);
	}

/*------------------------------------------------------------------------------*/

	/**
	* Метод для удаления перекрестка роль/ресурсЫ
	*/
	
	public function delCross($id)
	{      
		$this->_setTable('acl_cross');
		
		return  $this->delete('role_id=' . $id );
	}

/*------------------------------------------------------------------------------*/

	/**
	* Метод для удаления роли
	*/
	
	public function delRole($id)
	{      
		$this->_setTable('acl_roles');
		
		return  $this->delete('id=' . $id );
	}

/*------------------------------------------------------------------------------*/

	/**
	* Метод для удаления ресурса
	*/
	
	public function delResource($id)
	{      
		$this->_setTable('acl_resources');
		
		return  $this->delete('id=' . $id );
	}

/*==============================================================================*/

	/**
	* Приватный метод для смены имени таблицы
	* 
	* @param string $table
	*/

	private function _setTable($table)
	{
		$this->_name = $table;
		return;
	}

/*------------------------------------------------------------------------------*/

}
